import java.util.Date;

import org.junit.Before;
import org.junit.Test;

import junit.framework.TestCase;



public class TesteEmprestimo extends TestCase {
	Emprestimo emprestimo;
	Usuario aluno;
	Arcevo livro;
	String nome, titulo, tipo, chave, dataDoEmprestimo, dataDaDevolucao;
	boolean status;

	@Before
	public void setUp() throws Exception {
		nome = "Jose";
		titulo = "Java";
		tipo = "Livro";
		aluno = new Aluno(nome);
		livro = new Livro(titulo, tipo);
		dataDoEmprestimo = "01/02/2008";
		dataDaDevolucao = "";
		status = true;
		emprestimo = new Emprestimo(aluno, livro, dataDoEmprestimo, dataDaDevolucao, status);
	}
	
	@Test
	public void testEmprestimo() throws Exception {
		Emprestimo emprestimo1 = new Emprestimo(aluno, livro, dataDoEmprestimo, dataDaDevolucao, status);
		assertEquals("Erro de construtor 1", nome + ", " + titulo + ", " + dataDoEmprestimo + ", " + dataDaDevolucao + ", " + (status ? "Emprestado" : "Disponivel"), emprestimo1.getEmprestimo());
//		Emprestimo emprestimo2 = new Emprestimo(aluno, livro);
//		assertEquals("Erro de construtor 2", nome + ", " + titulo + ", " + dataDoEmprestimo + ", " + dataDaDevolucao + ", " + (status ? "Emprestado" : "Disponivel"), emprestimo2.getEmprestimo());
		try {
			Emprestimo emprestimo3 = new Emprestimo(null, livro, "", null, true);
			Emprestimo emprestimo4 = new Emprestimo(aluno, null, "", null, true);
			Emprestimo emprestimo5 = new Emprestimo(aluno, null, null, null, true);
			fail("Esperava-se uma excecao de construtor invalido");
		} catch (Exception e) {
			assertEquals("erro de contrutor invalido", "usuario, arcevo ou dataDoEmprestimo nulo", e.getMessage());
		}
	}
	
	@Test
	public void testGetStatus() {
		assertEquals("Erro get status", true, emprestimo.getStatus());
	}
	
	@Test
	public void testSetStatus() {
		emprestimo.setStatus(false);
		assertEquals("Erro get status", false, emprestimo.getStatus());
	}
	
	/*
	@Test
	public void emprestar() {
		nome = "Jose";
		titulo = "Java";
		tipo = "Livro";
		status = "Emprestado";

		emprestimo.emprestar(nome, titulo, dataDoEmprestimo, status);
		assertEquals("Erro de getEmprestimo 1", nome + ", " + titulo + ", " + dataDoEmprestimo + ", " + status, emprestimo.getEmprestimo());
		assertEquals("Erro de getEmprestimo 1", nome + ", " + titulo + ", " + dataDoEmprestimo + ", " + status, emprestimo.getEmprestimo(0));
		assertEquals("Erro de getEmprestimo 1", nome + ", " + titulo + ", " + dataDoEmprestimo + ", " + status, emprestimo.getEmprestimo("nome"));
		assertEquals("Erro de getEmprestimo 1", nome + ", " + titulo + ", " + dataDoEmprestimo + ", " + status, emprestimo.getEmprestimo("tipo", "livro"));
	}
	
	@Test
	public void devolter() {
		nome = "Jose";
		titulo = "Java";
		tipo = "Livro";
		status = "Devolvido";

		emprestimo.devolver(nome, titulo, dataDaDevolucao, status);
		assertEquals("Erro de getEmprestimo 1", nome + ", " + titulo + ", " + dataDaDevolucao + ", " + status, emprestimo.getEmprestimo());
		assertEquals("Erro de getEmprestimo 1", nome + ", " + titulo + ", " + dataDaDevolucao + ", " + status, emprestimo.getEmprestimo(0));
		assertEquals("Erro de getEmprestimo 1", nome + ", " + titulo + ", " + dataDaDevolucao + ", " + status, emprestimo.getEmprestimo("nome"));
		assertEquals("Erro de getEmprestimo 1", nome + ", " + titulo + ", " + dataDaDevolucao + ", " + status, emprestimo.getEmprestimo("tipo", "livro"));
	}
	
	@Test
	public void pesquisa() {
		nome = "Jose";
		titulo = "Java";
		tipo = "Livro";
		status = "Devolvido";

		item = emprestimo.pesquisa(tipo, chave);
		assertEquals("Erro de getEmprestimo 1", nome, emprestimo.getNome(item));
		assertEquals("Erro de getEmprestimo 1", titulo, emprestimo.getTitulo(item));
		assertEquals("Erro de getEmprestimo 1", dataDoEmprestimo, emprestimo.getDataDoEmprestimo(item));
		assertEquals("Erro de getEmprestimo 1", dataDaDevolucao, emprestimo.getDataDaDevolucao(item));
		assertEquals("Erro de getEmprestimo 1", status, emprestimo.getStatus(item));
		
		item = emprestimo.pesquisa(tipo, chave);
		assertEquals("Erro de getEmprestimo 1", nome, emprestimo.getNome(item));
		assertEquals("Erro de getEmprestimo 1", titulo, emprestimo.getTitulo(item));
		assertEquals("Erro de getEmprestimo 1", dataDoEmprestimo, emprestimo.getDataDoEmprestimo(item));
		assertEquals("Erro de getEmprestimo 1", dataDaDevolucao, emprestimo.getDataDaDevolucao(item));
		assertEquals("Erro de getEmprestimo 1", status, emprestimo.getStatus(item));
	}
	*/
}
